<?php

class CargarDatos_Model extends CI_Model {

    /////////////////////////CONTROLADOR: FUNCION cargar_cursos_horarios_docentes////////////////////////

    function cargar_cursos_horarios_docentes($docentes) {

        $this->db->trans_start();

        foreach ($docentes as $docente) {
            //Ciclo
            $this->db->where('descripcion', $docente[0]);
            $query1 = $this->db->get('ciclo');
            if ($query1->num_rows() > 0) {
                $resultado = $query1->result_array();
                $idCiclo = $resultado[0]['idCiclo'];
            } else {
                return "no_existe_ciclo";
            }
            //Curso
            $this->db->where('codigo', $docente[1]);
            $query2 = $this->db->get('curso');

            if ($query2->num_rows() == 0) {
                $data = array(//curso
                    'codigo' => $docente[1],
                    'nombre' => $docente[2]
                );
                $this->db->insert('curso', $data);
                $idCurso = $this->db->insert_id();
            } else {
                $resultado = $query2->result_array();
                $idCurso = $resultado[0]['idCurso'];
            }

            //Horario
            $this->db->where('codigo', $docente[3]);
            $query3 = $this->db->get('horario');
            if ($query3->num_rows() == 0) {
                $data1 = array(
                    'codigo' => $docente[3]
                );
                $this->db->insert('horario', $data1);
                $idHorario = $this->db->insert_id();
            } else {
                $resultado = $query3->result_array();
                $idHorario = $resultado[0]['idHorario'];
            }

            //Docente
            $this->db->where('codigo', $docente[4]);
            $query4 = $this->db->get('usuario');

            if ($query4->num_rows() == 0) {
                $data2 = array(
                    'codigo' => $docente[4],
                    'nombres' => $docente[5],
                    'apePaterno' => $docente[6],
                    'apeMaterno' => $docente[7],
                    'email' => $docente[8],
                    'estado' => '1',
                    'idPerfil' => '2', //idPerfil de docente: 2
                    'password' => random_string('alnum', 8) //genera contrasela aleatoriamente
                );
                $this->db->insert('usuario', $data2);

                $idDocente = $this->db->insert_id();
            } else {
                $resultado = $query4->result_array();
                $idDocente = $resultado[0]['idUsuario'];
            }

            //SALON
            $this->db->where('idHorario', $idHorario);
            $this->db->where('idCiclo', $idCiclo);
            $this->db->where('idCurso', $idCurso);
            $query5 = $this->db->get('salon');

            if ($query5->num_rows() == 0) {
                $data4 = array(
                    'idCiclo' => $idCiclo,
                    'idCurso' => $idCurso,
                    'idHorario' => $idHorario
                );
                $this->db->insert('salon', $data4);

                $this->db->where('idUsuario', $idDocente);
                $this->db->where('idHorario', $idHorario);
                $this->db->where('idCiclo', $idCiclo);
                $this->db->where('idCurso', $idCurso);
                $query6 = $this->db->get('usuarioxsalon');
                if ($query6->num_rows() == 0) {
                    $data5 = array(
                        'idUsuario' => $idDocente,
                        'idCiclo' => $idCiclo,
                        'idCurso' => $idCurso,
                        'idHorario' => $idHorario
                    );
                    $this->db->insert('usuarioxsalon', $data5);
                }
            }
        }

        $this->db->trans_complete();

        if ($this->db->trans_status() === FALSE)
            $mensaje = "error";
        else
            $mensaje = "ok";



        return $mensaje;
    }

    /////////////////////////CONTROLADOR: FUNCION buscar_ciclo_academico/////////////////////////

    function buscar_ciclo_academico($ciclo) {
        $this->db->where('estado', '1'); //ESTADO 1: Con semanas registradas
        $this->db->like('descripcion', $ciclo);
        $query = $this->db->get('ciclo');

        if ($query->num_rows() > 0) {
            return $query->result_array();
        } else {
            return false;
        }
    }

    /////////////////////////CONTROLADOR: FUNCION ver_ciclo_academico/////////////////////////

    function buscar_ciclo($idCiclo) {
       
        $this->db->where('estado', '1'); //ESTADO 1: Con semanas registradas
        $this->db->where('idCiclo', $idCiclo);
        $query = $this->db->get('ciclo');

        if ($query->num_rows() > 0) {
            return $query->result();
        } else {
            return false;
        }
    }

    /////////////////////////CONTROLADOR: FUNCION ver_ciclo_academico/////////////////////////

    function buscar_semanas($idCiclo) {
        $query = $this->db->query("SELECT 
                                    S.numSemana, 
                                    DATE_FORMAT(S.fechaIni,'%d/%m/%Y') AS fechaIni, 
                                    DATE_FORMAT(S.fechaFin,'%d/%m/%Y') AS fechaFin
                                    FROM ciclo C
                                    LEFT JOIN semanaxciclo SC
                                    ON SC.idCiclo = C.idCiclo
                                    LEFT JOIN semana S
                                    ON S.idSemana=SC.idSemana
                                    WHERE C.idCiclo=" . $idCiclo . " ");

        if ($query->num_rows() > 0) {
            return $query->result_array();
        } else {
            return false;
        }
    }

    /////////////////////////CONTROLADOR: FUNCION modificar_ciclo_academico/////////////////////////

    function buscar_semanas_modificar($idCiclo) {
        $query = $this->db->query("SELECT 
                                    S.idSemana,
                                    S.numSemana, 
                                    S.fechaIni, 
                                    S.fechaFin
                                    FROM ciclo C
                                    LEFT JOIN semanaxciclo SC
                                    ON SC.idCiclo = C.idCiclo
                                    LEFT JOIN semana S
                                    ON S.idSemana=SC.idSemana
                                    WHERE C.idCiclo=" . $idCiclo . " ");

        if ($query->num_rows() > 0) {
            return $query->result_array();
        } else {
            return false;
        }
    }

    function buscar_feriados($idCiclo) {
        $query = $this->db->query("SELECT 
                                    DATE_FORMAT(E.fechaEvento,'%m/%d/%Y') as fechaEvento
                                    FROM evento E
                                    LEFT JOIN ciclo C
                                    ON C.idCiclo = E.idCiclo
                                    WHERE E.tipoEvento='feriado'
                                    AND E.idCiclo=" . $idCiclo . " ");

        if ($query->num_rows() > 0) {
            return $query->result_array();
        } else {
            return false;
        }
    }

    function buscar_examenes($idCiclo) {
        $query = $this->db->query("SELECT 
                                    DATE_FORMAT(E.fechaEvento,'%m/%d/%Y') as fechaEvento
                                    FROM evento E
                                    LEFT JOIN ciclo C
                                    ON C.idCiclo = E.idCiclo
                                    WHERE E.tipoEvento='Exámenes'
                                    AND E.idCiclo=" . $idCiclo . " ");

        if ($query->num_rows() > 0) {
            return $query->result_array();
        } else {
            return false;
        }
    }

    /////////////////////////CONTROLADOR: FUNCION registrar_ciclo_academico/////////////////////////

    function combo_ciclos_sin_calendario() {
        $this->db->select('idCiclo, descripcion');
        $this->db->where('estado', '0'); //ESTADO 0: Sin semanas registradas
        $this->db->order_by("descripcion", "desc");
        $resultado = $this->db->get('ciclo')->result_array();

        return $resultado;
    }

    /////////////////////////CONTROLADOR: FUNCION registrar_semanas_ciclo_academico/////////////////////////

    function registrar_semanas_ciclo_academico($semanas, $idCiclo) {

        $this->db->trans_start();

        for ($i = 1; $i <= 18; $i++) {
            $fi = $semanas['fi' . $i];
            $ff = $semanas['ff' . $i];

            $data = array(
                'numSemana' => $i,
                'fechaIni' => $fi,
                'fechaFin' => $ff,
                'descripcion' => "Semana " . $i
            );
            $this->db->insert('semana', $data);

            $idSemana = $this->db->insert_id();
            $data2 = array(
                'idCiclo' => $idCiclo,
                'idSemana' => $idSemana
            );
            $this->db->insert('semanaxciclo', $data2);
        }
        //registrar las fechas de eventos
        $fechas = $semanas['fechaMultiple'];
        $arregloFecha = explode(",", $fechas);


        for ($i = 0; $i <= count($arregloFecha) - 1; $i++) {
            $data1 = array(
                'tipoEvento' => "feriado",
                'fechaEvento' => $arregloFecha[$i],
                'idCiclo' => $idCiclo
            );
            $this->db->insert('evento', $data1);
        }

        $fechasExamenes = $semanas['fechaExamenes'];
        $arregloFechaEx = explode(",", $fechasExamenes);

        for ($i = 0; $i <= count($arregloFechaEx) - 1; $i++) {
            $data4 = array(
                'tipoEvento' => "Exámenes",
                'fechaEvento' => $arregloFechaEx[$i],
                'idCiclo' => $idCiclo
            );
            $this->db->insert('evento', $data4);
        }

        //actualizar estado del ciclo
        $data3 = array(
            'estado' => 1
        );

        $this->db->where('idCiclo', $idCiclo);
        $this->db->update('ciclo', $data3);

        $this->db->trans_complete();

        if ($this->db->trans_status() === FALSE)
            $mensaje = "error";
        else
            $mensaje = "ok";

        return $mensaje;
    }

    /////////////////////////CONTROLADOR: FUNCION modificar_semanas_ciclo_academico/////////////////////////

    function modificar_semanas_ciclo_academico($semanas) {


        $this->db->trans_start();

        for ($i = 1; $i <= 18; $i++) {
            $fi = $semanas['fi' . $i];
            $ff = $semanas['ff' . $i];
            $idSemana = $semanas['idSemana' . $i];

            $data = array(
                'fechaIni' => $fi,
                'fechaFin' => $ff
            );
            $this->db->where('idSemana', $idSemana);
            $this->db->update('semana', $data);
        }

        //modificar evento
        $fechas = $semanas['fechaMultiple'];
        $arregloFecha = explode(",", $fechas);

        $this->db->select('idCiclo');
        $this->db->where('descripcion', $semanas['idCiclo']);
        $resultado = $this->db->get('ciclo')->result_array();
        $this->db->where('idCiclo', $resultado[0]['idCiclo']);
        $this->db->delete('evento');

        for ($i = 0; $i <= count($arregloFecha) - 1; $i++) {
            $time = strtotime($arregloFecha[$i]);
            $newformat1 = date('Y-m-d', $time);
            $data1 = array(
                'tipoEvento' => "feriado",
                'fechaEvento' => $newformat1,
                'idCiclo' => $resultado[0]['idCiclo']
            );


            $this->db->insert('evento', $data1);
        }

        $fechasEx = $semanas['fechaExamenes'];
        $arregloFechaEx = explode(",", $fechasEx);

        for ($i = 0; $i <= count($arregloFechaEx) - 1; $i++) {
            $time = strtotime($arregloFechaEx[$i]);
            $newformat2 = date('Y-m-d', $time);
            $data2 = array(
                'tipoEvento' => "Exámenes",
                'fechaEvento' => $newformat2,
                'idCiclo' => $resultado[0]['idCiclo']
            );

            $this->db->insert('evento', $data2);
        }

        $this->db->trans_complete();

        if ($this->db->trans_status() === FALSE)
            $mensaje = "error";
        else
            $mensaje = "ok";

        return $mensaje;
    }

    /////////////////////////CONTROLADOR: FUNCION eliminar_semanas_ciclo_academico/////////////////////////

    function eliminar_semanas_ciclo_academico($idCiclo) {

        $this->db->trans_start();

        $cad = "DELETE FROM semana 
                WHERE idSemana IN (SELECT * FROM (SELECT S.idSemana
                FROM semana S
                LEFT JOIN semanaxciclo SC
                ON S.idSemana=SC.idSemana 
                WHERE SC.idCiclo=" . $idCiclo . " ) AS p )";

        $this->db->query($cad);
        $data = array(
            'estado' => 0
        );
        $this->db->where('idCiclo', $idCiclo);
        $this->db->delete('evento');
        

        $this->db->where('idCiclo', $idCiclo);
        $this->db->update('ciclo', $data);

        $this->db->trans_complete();

        if ($this->db->trans_status() === FALSE)
            $mensaje = "error";
        else
            $mensaje = "ok";

        return $mensaje;
    }

    function buscar_cursos_horarios_docentes($curso, $horario, $docente) {
        $query = $this->db->query("SELECT
                                    CI.descripcion AS ciclo,
                                    C.codigo AS curso,
                                    C.nombre AS nbrcurso,
                                    H.codigo AS horario,
                                    CONCAT_WS(' ',U.nombres,U.apeMaterno,U.apePaterno) AS docente,
                                    U.codigo AS coddocente
                                    FROM usuarioxsalon US
                                    LEFT JOIN curso C
                                    ON US.idCurso = C.idCurso
                                    LEFT JOIN horario H
                                    ON US.idHorario = H.idHorario
                                    LEFT JOIN usuario U
                                    ON US.idUsuario = U.idUsuario 
                                    LEFT JOIN ciclo CI
                                    ON US.idCiclo = CI.idCiclo
                                    WHERE U.idPerfil=2 
                                    AND C.codigo like '%" . $curso . "%'
                                    AND H.codigo like '%" . $horario . "%'
                                    AND U.codigo like '%" . $docente . "%'");

        if ($query->num_rows() > 0) {
            return $query->result_array();
        } else {
            return false;
        }
    }

}

?>